export default {
  //开启命名空间
  namespaced: true,
  
  //定义数据节点
  state:() => ({
    // address: {}
    //初始化数据：调用API将地址转成字符串并保存到本地，如果读取失败，返回空对象
    address: JSON.parse(uni.getStorageSync('address' || '{}')),
    token: uni.getStorageSync('token') || '', //初始化登录密钥--从本地存储调取token
    userinfo: JSON.parse(uni.getStorageSync('userinfo') || '{}'), //定义用户的信息对象这个数据节点 
    redirectInfo: null, //重定向的 Object 对象
  }),
  
  //方法节点
  mutations: {
    //更新收货地址
    updateAddress(state,address){
      state.address = address
      
      //调用 m_user 模块里的 saveAddressToStorage 方法
      this.commit('m_user/saveAddressToStorage')
    },
    //持久化存储address到本地
    saveAddressToStorage(state){
      //调用API，将state的address转成字符串，存储到本地
      uni.setStorageSync('address',JSON.stringify(state.address))
    },
    //更新 vuex 的数据 的方法
    updateUserInfo(state,userinfo){
      state.userinfo = userinfo //赋值
      this.commit('m_user/saveUserInfoToStorage') //触发 本地持久化存储
    },
    //定义 本地持久化存储
    saveUserInfoToStorage(state){
      uni.setStorageSync('userinfo',JSON.stringify(state.userinfo))
    },
    updateRedirectInfo(state,info){//形参info是准备接收外界传过来的信息
    state.redirectInfo = info //赋值给变量
    // console.log(state.redirectInfo) //查看数据结构--包含了openType 和 from 两个属性
    },
    
    //跟新获取token
    updateToken(state,token){
      state.token = token
      this.commit('m_user/saveTokenToStorage') //调用持久化存储本地的方法
    },
    //持久化保存本地的方法
    saveTokenToStorage(state){
      uni.setStorageSync('token', state.token)
    }
  },
  
  //
  getters: {
    //收货地址
    //addstr是从my-address.vue中移过来的，并把 this 替换为 state, 
      //然后可以在组件中引用，映射了
    addstr(state){//定义一个计算属性addstr
      //如果地址为空，返回空字符串
      if(!state.address.provinceName) return '' 
      //否则把地址串起来，并这个返回(抛出)
      return state.address.provinceName + state.address.cityName + state.address.countyName + state.address.detailInfo
    }
  }
}
//user模块即定义好了，可以挂在到store上